package reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 应用反射API,获取类的信息(类的名字/属性/方法/构造器等)
 */
public class Demo02 {
    public static void main(String[] args) {
        String path="reflectionbean.User";
        try {
            Class clazz=Class.forName(path);
            System.out.println(clazz.hashCode());
            //获取类的名字
            System.out.println(clazz.getName());//获得包名+类名
            System.out.println(clazz.getSimpleName());//获得类名
            //获取属性信息
            //Field[] fs=clazz.getFields();//只能获取public修饰的属性
            //Field fd=clazz.getField("uname");//获取指定属性
            Field[] fs=clazz.getDeclaredFields();//获取所有属性
            for(Field f:fs){
                System.out.println("属性:"+f);
            }

            //获取方法信息
            //Method[] method=clazz.getMethods();//获得public修饰的方法
            //Method md=clazz.getMethod("");//获取指定方法
            Method[] methods=clazz.getDeclaredMethods();//获得所有方法
            for (Method m:methods){
                System.out.println("方法:"+m);
            }
            //获取构造器信息
            Constructor[] constructors=clazz.getDeclaredConstructors();//获取所有构造器
            for (Constructor c:constructors){
                System.out.println("构造器:"+c);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
